package com.liujit.generator.engine.base;

import com.liujit.generator.domain.model.FieldInfo;
import com.liujit.generator.engine.config.*;
import lombok.Data;

import java.util.List;

/**
 * @Description 模板生成父类
 * @Author LiuJun
 * @Date 2020/8/13 2:06 下午
 */
@Data
public class BaseTemplateEngine {

    /**
     * 全局配置
     */
    protected ContextConfig contextConfig;

    /**
     * Controller模板生成的配置
     */
    protected ControllerConfig controllerConfig;

    /**
     * Service模板生成的配置
     */
    protected ServiceConfig serviceConfig;

    /**
     * Service模板生成的配置
     */
    protected MapperConfig mapperConfig;

    /**
     * Model模板生成的配置
     */
    protected ModelConfig modelConfig;

    /**
     * Query模板生成的配置
     */
    protected QueryConfig queryConfig;

    /**
     * Param模板生成的配置
     */
    protected ParamsConfig paramsConfig;

    /**
     * Result模板生成的配置
     */
    protected ResultConfig resultConfig;

    /**
     * 表字段信息
     */
    protected List<FieldInfo> fieldInfos;

    /**
     * 表字段信息包含enabled
     */
    protected Boolean enabled;

    /**
     * 表字段信息包含创建时间
     */
    protected Boolean createTime;

    /**
     * 表字段信息包含时间日期字段
     */
    protected Boolean date;

    /**
     * 包含BigDecimal
     */
    protected Boolean bigDecimal;

    public void initConfig() {
        // 全局配置
        if (this.contextConfig == null) {
            this.contextConfig = new ContextConfig();
        }
        contextConfig.init();
        // Controller
        if (this.controllerConfig == null) {
            this.controllerConfig = new ControllerConfig();
        }
        controllerConfig.init(this.contextConfig);
        // Service
        if (this.serviceConfig == null) {
            this.serviceConfig = new ServiceConfig();
        }
        serviceConfig.init(this.contextConfig);
        // Mapper
        if (this.mapperConfig == null) {
            this.mapperConfig = new MapperConfig();
        }
        mapperConfig.init(this.contextConfig);
        // Model
        if (this.modelConfig == null) {
            this.modelConfig = new ModelConfig();
        }
        modelConfig.init(this.contextConfig);
        // Query
        if (this.queryConfig == null) {
            this.queryConfig = new QueryConfig();
        }
        queryConfig.init(this.contextConfig);
        // Param
        if (this.paramsConfig == null) {
            this.paramsConfig = new ParamsConfig();
        }
        paramsConfig.init(this.contextConfig);
        // Result
        if (this.resultConfig == null) {
            this.resultConfig = new ResultConfig();
        }
        resultConfig.init(this.contextConfig);
    }
}
